package org.myspringframework.core.aop.aspect;

import org.aspectj.weaver.tools.PointcutExpression;
import org.aspectj.weaver.tools.PointcutParser;

/**
 * @author jaymin.<br>
 * 解析Aspect表达式并且定位被织入的目标.<br>
 * 2021/2/28 23:02
 */
public class PointcutLocator {
    /**
     * pointcut解析器，直接给它赋值上AspectJ的所有表达式,以便支持对众多表达式的解析
     */
    private PointcutParser pointcutParser = PointcutParser.getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(
            PointcutParser.getAllSupportedPointcutPrimitives()
    );
    /**
     * 表达式解析器
     */
    private PointcutExpression pointcutExpression;

    /**
     * 通过构造函数来获取表达式对象
     *
     * @param expression
     */
    public PointcutLocator(String expression) {
        this.pointcutExpression = pointcutParser.parsePointcutExpression(expression);
    }

    /**
     * 判断传入的Class对象是否是Aspect的目标代理类,则匹配Pointcut表达式(初筛)
     *
     * @param targetClass
     * @return
     */
    public static boolean roughMatches(Class<?> targetClass) {
        return false;
    }
}
